//import java.lang.reflect.Array;
//import java.util.ArrayList;
//import java.util.Arrays;
//import java.util.HashMap;
//import java.util.Map;
//
//import static java.lang.Math.pow;
//
//public class Demo1{
//    public static boolean data(long num) {
//        //判断是否为回文日期
//        StringBuilder s = new StringBuilder(Long.toString(num));
//        s.reverse();
//        String ss = new String(s);
//        String sss = new String(Long.toString(num));
//        if (ss.equals(sss)) {
//            return true;
//        } else {
//            return false;
//        }
//    }
//    public static void main(String[] args){
//
//        Scanner sc = new Scanner(System.in);
//        int n = sc.nextInt();
//
//        //定义一个数组
//        Long [] arr = new Long[n];
//
//        Long sum = 0l;
//        //对数组赋值
//        for( int i = 0 ; i < arr.length ; i++ ){
//            arr[i] = sc.nextLong();
//            sum += arr[i];  //对数组求和
//        }
//
//        //结果
//        Long res = 0l;
//        for( int i = 0 ; i < arr.length - 1 ; i++ ){
//            //依次减去当前索引所指的数
//            sum -= arr[i];
//            //累加求和
//            res += sum * arr[i];
//        }
//
//        System.out.println(res);
        //lambda表达式
        //判断是否是回文数字
//        long l = 1221;
//        String s = Long.toString(l);
//        int n = s.length();
//        for(int i = 0; i < n / 2; i++){
//            if(s.charAt(i) != s.charAt(n - i - 1)){
//                System.out.println("false");
//            }
//        }
//        System.out.println("true");
//        int up = 1;
//        int down = 1;
//        for(int i = 0; i < 19; i++){
//            down = down * 2;
//            up = up + down;
//        }
//
//        System.out.print(up + "/" + down);
//        long num = 1000;
//        StringBuilder s = new StringBuilder(Long.toString(num));
//        s.reverse();
//        StringBuilder s = new StringBuilder("abc");
//        StringBuilder ss = new StringBuilder("abc");
//        String sss =  new String("avc");
//        String ssss =  new String("avc");
//        System.out.println(s == ss);
//        System.out.println(s.equals(ss));
//        System.out.println(sss == ssss);
//        System.out.println(sss.equals(ssss));
//        long a = 122;
//        System.out.println(data(a));
//        Map<Long,Integer> map = new HashMap<>();
//        map.put()
//        int num = runTime(num);
//        int N = (int)2e3+10;
//        System.out.println();
//        System.out.println(N);
        //测试hashmap
//        Map<Integer, Integer> map = new HashMap<>();
//        map.put(1,2);
////        map.get(1).
//        System.out.println(map.get(1));
//
//    }
//
//}
import java.util.*;

public class Demo1 {
    public static void main(String[] args) {

        //测试comparator的使用
        Integer[] array = new Integer[]{1,3,2};
        Comparator<Integer> cmp = new Comparator<Integer>() {
            @Override
            public int compare(Integer i1, Integer i2) {
                return i2-i1;
            }
        };
        Arrays.sort(array, cmp);

        for(int i = 0; i < 3; i++){
            System.out.println(array[i]);
        }
    }

    static int N = 100;
    static boolean[][] st = new boolean[N][N];
    static Queue<int[]> q = new LinkedList<>();
    static Map<Integer, ArrayList<int[]>> mp = new HashMap<>();
    static int[] dx = {0, 1, 0, -1};
    static int[] dy = {1, 0, -1, 0};
    static int n;

    static void add(int x1, int y1, int x2, int y2) {
        int key = x1 * n + y1;
        if(!mp.containsKey(key)) mp.put(key, new ArrayList<>());
        mp.get(key).add(new int[]{x2, y2});
    }

    public static void main2(String[] args) {
        Scanner s = new Scanner(System.in);
        n = s.nextInt();
        int m = s.nextInt();

        for(int i = 1; i <= m; i++) {
            int x1 = s.nextInt();
            int y1 = s.nextInt();
            int x2 = s.nextInt();
            int y2 = s.nextInt();
            add(x1, y1, x2, y2);
            add(x2, y2, x1, y1);
        }

        st[n][n] = true;
        q.add(new int[] {n, n});

        int res = 0;
        int cnt = 0;
        while(!q.isEmpty()) {
            int size = q.size();

            while(size-- > 0) {
                res += cnt;

                int[] t = q.poll();
                int x = t[0], y = t[1];

                int key = x * n + y;
                if(mp.containsKey(key)) {
                    ArrayList<int[]> tmpArr = mp.get(key);
                    for(int[] tAr: tmpArr) {
                        if(!st[tAr[0]][tAr[1]]) {
                            q.add(new int[] {tAr[0], tAr[1]});
                            st[tAr[0]][tAr[1]] = true;
                        }
                    }
                }

                for(int i = 0; i < 4; i++) {
                    int tX = x - dx[i], tY = y - dy[i];
                    if(tX >= 1 && tX <= n && tY >= 1 && tY <= n && !st[tX][tY]) {
                        q.add(new int[] {tX, tY});
                        st[tX][tY] = true;
                    }
                }
            }
            cnt++;
        }

        System.out.printf("%.2f", (res*1.0)/(n*n));
    }

}